home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 4 / Amiga Tools 4.iso / tools / system-tools / grabkick / grabkick.a < prev    next >
Text File  |  1996-02-15  |  5KB  |  174 lines

  1. ;**** GrabKick.a ******************************************
  2.  
  3.     NOLIST
  4.     INCDIR    AINCLUDE:
  5.     INCLUDE    libraries/dosextens.i
  6.     INCLUDE lvo.i
  7.     INCLUDE dos/dos.i
  8.     INCLUDE    exec/execbase.i
  9.     INCLUDE    workbench/startup.i
  10.     INCLUDE    workbench/workbench.i
  11.     INCLUDE    libraries/asl.i
  12.     LIST
  13.  
  14. ; Programmheader
  15. ;
  16. ;    Name:        GrabKick
  17. ;    Author:        SDI
  18. ;    Distribution:    PD
  19. ;    Description:    liest Kickstart aus und schreibt ihn in Datei
  20. ;    Compileropts:    -
  21. ;    Linkeropts:    -
  22. ;    CLI-Parameter:    FILENAME
  23. ;
  24. ; 1.2   07.08.95 : neue Berechnung für Revisionsnummer gleicht Rechen-
  25. ;    fehler von MaxonC++ aus - Länge 880
  26. ; 1.3   03.12.95 : Mit Assembler neukompiliert - Länge 244
  27. ; 1.4   04.12.95 : etwas verkürzt - Länge 236
  28. ; 1.5   10.12.95 : etwas verkürzt - Länge 228
  29. ; 1.6   19.12.95 : läuft auch von WB aus - Länge 300
  30. ; 1.7   05.01.96 : CLI Parameter Filename eingebaut, Fehler entfernt
  31. ;    Länge 332
  32. ; 1.8   10.02.96 : Asl-Requester bei Workbench-Start, neues Icon - Länge 508
  33. ; 1.9   11.02.96 : etwas gekürzt, Text kommentiert - Länge 488
  34. ; 1.10  12.02.96 : kleine Änderung - Länge 484
  35. ; 1.11  14.02.96 : CMPA.L #0,Ax durch MOVE.L Ax,D0 ersetzt - Länge 476
  36.  
  37. ;**** Programm ********************************************
  38.  
  39.     SECTION "GrabKick",CODE
  40.     SUBQ.W    #1,D0        ; SUBQ statt Offset -1, da TST statt CMP #1
  41.     CLR.B    (A0,D0.W)        ;Letztes Zeichen 0 - CString
  42.     MOVE.L    A0,D5                ;D5 - CLI-Parameter Name!
  43.     TST.W    D0    ;Wenn nur ein Zeichen, dann kein Param. angegeben!
  44.     BNE.B    .start
  45.     MOVEQ    #0,D5                ;D5 - löschen, da leer
  46. .start    MOVEQ    #0,D7                ;D7 - später StartupM! = 0
  47.     MOVEA.L    4.W,A6
  48.     MOVEA.L    ThisTask(A6),A4
  49.     TST.L    pr_CLI(A4)        ;Laufen wir unter WB?
  50.     BNE.B    .CLI
  51.     LEA    pr_MsgPort(A4),A0
  52.     JSR    _LVOWaitPort(A6)    ;Warte auf Start-Message
  53.     LEA    pr_MsgPort(A4),A0
  54.     JSR    _LVOGetMsg(A6)        ;Hole Msg
  55.     MOVE.L    D0,D7                ;D7 - WBStartUp Message
  56. .CLI    LEA    KICKEND(PC),A2            ;A2 - KickStr-Ende
  57.     MOVEQ    #33,D0
  58.     LEA    DOSNAME(PC),A1
  59.     JSR    _LVOOpenLibrary(A6)    ;Open Dos-Lib
  60.     TST.L    D0            ;Fataler Fehler : Librarybase = 0?
  61.     BEQ.B    .goend            ;statt BEG.W ENDE (-2 Byte)
  62.     MOVEA.L    D0,A5                ;A5 - DosBase
  63.     TST.L    D7
  64.     BEQ.B    .NoWB
  65.     MOVEA.L    D7,A0
  66.     MOVEA.L    sm_ArgList(A0),A0    ;Bei WB-Start Progdir ermitteln
  67.     MOVE.L    A0,D0            ;statt CMPA.L #0,A0 (-4 Byte)
  68. .goend    BEQ.W    ENDE
  69.     MOVE.L    (A0),D1            ;und setzen
  70.     MOVEA.L    A5,A6
  71.     JSR    _LVOCurrentDir(A6)
  72. .NoWB    LEA    $01000000,A3        ;Kick-ROM Ende -> feste Adresse
  73.     MOVE.L    -20(A3),D3            ;D3 - RomSize
  74.     SUBA.L    D3,A3                ;A3 - Romstart
  75.     MOVE.W    12(A3),D4            ;D4 - Romvers
  76.     MULU    #1000,D4
  77.     ADD.W    14(A3),D4            ;D4 - Fullversion
  78. .LOOP                    ;kick..... Namen berechnen
  79.     MOVE.L    D4,D2
  80.     DIVU    #10,D2            ;durch Zehn teilen
  81.     MOVE.W    D2,D4            ;Ergebnis nach D4
  82.     SWAP    D2
  83.     ADD.B    D2,-(A2)        ;Rest in Namensfile
  84.     TST.L    D4
  85.     BNE.B    .LOOP
  86. ;Schleifenende                    ;D4 wieder frei
  87.     MOVEA.L    D5,A2                ;A2 - CLI-Name oder
  88.     TST.L    D5
  89.     BNE.B    .GoOn
  90.     LEA    KICKSTR(PC),A2            ;A2 - kick.....
  91. .GoOn    MOVEQ    #0,D6                ;D6 - später Asl-Base!  = 0
  92.     MOVEQ    #0,D5                ;D5 - später Lock! = 0
  93.     TST.L    D7            ;WB ?, dann Asl, sonst normal weiter
  94.     BEQ.B    Open
  95.     MOVEA.L    4.W,A6
  96.     LEA    ASLNAME(PC),A1
  97.     MOVEQ    #37,D0
  98.     JSR    _LVOOpenLibrary(A6)    ;Open asl.library
  99.     MOVE.L    D0,D6                ;D6 - AslBase
  100.     BEQ.B    Open            ;failed ?, dann weiter wie in CLI
  101.     MOVEA.L    D6,A6
  102.     MOVEQ    #ASL_FileRequest,D0
  103.     LEA    TAGITEM(PC),A0
  104.     JSR    _LVOAllocAslRequest(A6)    ;Struktur anlegen
  105.     MOVEA.L    D0,A4                ;A4 - FileRequester
  106.     TST.L    D0
  107.     BEQ.B    Open            ;failed ?, dann weiter wie in CLI
  108.     MOVEA.L    A4,A0
  109.     LEA    TAGITEM(PC),A1
  110.     JSR    _LVOAslRequest(A6)    ;Requester aufrufen
  111.     TST.L    D0
  112.     BEQ.B    CLEANUP            ;failed?, dann beenden
  113.     MOVE.L    fr_Drawer(A4),D1
  114.     MOVEQ    #SHARED_LOCK,D2            ;Zugriffsmodus
  115.     MOVEA.L    A5,A6
  116.     JSR    _LVOLock(A6)        ;Lock auf Verzeichnis
  117.     MOVE.L    D0,D5                ;D5 - Lock
  118.     BEQ.B    CLEANUP            ;failed?, dann beenden
  119.     MOVE.L    D5,D1
  120.     JSR    _LVOCurrentDir(A6)    ;und dieses als aktuelles Verzeichnis
  121.     MOVEA.L    fr_File(A4),A2            ;A2 - Asl-Name
  122. Open    MOVE.L    A2,D1            ;Name-Parameter
  123.     MOVE.W    #MODE_NEWFILE,D2    ;Modus-Parameter
  124.     MOVEA.L    A5,A6
  125.     JSR    _LVOOpen(A6)
  126.     MOVE.L    D0,D4                ;D4 - Filehandle
  127.     BEQ.B    CLEANUP
  128.                     ;Anzahl-Parameter D3 hat schon Wert
  129.     MOVE.L    D4,D1            ;Filehandle-Parameter
  130.     MOVE.L    A3,D2            ;Puffer-Parameter
  131.     JSR    _LVOWrite(A6)
  132.     MOVE.L    D0,D2        ;D2 - Write Rückgabe
  133.     MOVE.L    D4,D1            ;Filehandle-Parameter
  134.     JSR    _LVOClose(A6)
  135.     CMP.L    D3,D2        ;D2 != D3, dann File löschen
  136.     BEQ.B    CLEANUP
  137.     MOVE.L    A2,D1
  138.     JSR    _LVODeleteFile(A6)
  139. CLEANUP
  140.     MOVE.L    D5,D1
  141.     BEQ.B    .next
  142.     JSR    _LVOUnLock(A6)        ;Lock freigeben
  143. .next    TST.L    D6
  144.     BEQ.B    .clsdos
  145.     MOVE.L    A4,D0        ;statt CMPA.L #0,A4 (-4 Byte)
  146.     BEQ.B    .clsasl
  147.     MOVEA.L    A4,A0
  148.     MOVEA.L    D6,A6
  149.     JSR    _LVOFreeAslRequest(A6)    ;Filerequester schließen
  150. .clsasl    MOVEA.L    4.W,A6
  151.     MOVEA.L    D6,A1
  152.     JSR    _LVOCloseLibrary(A6)    ;Close Asl
  153. .clsdos    MOVEA.L    4.W,A6
  154.     MOVEA.L    A5,A1
  155.     JSR    _LVOCloseLibrary(A6)    ;Close Dos
  156. ENDE
  157.     TST.L    D7            ;von Workbench ?
  158.     BEQ.B    .exit            ;nein - war CLI
  159.  
  160.     JSR    _LVOForbid(A6)        ;Schutzmaßnahme
  161.     MOVEA.L    D7,A1            ;Message holen
  162.     JSR    _LVOReplyMsg(A6)
  163.  
  164.     MOVEQ    #0,D0
  165. .exit    RTS    
  166. DOSNAME    CSTRING    'dos.library'
  167. ASLNAME    CSTRING    'asl.library'
  168. KICKSTR    DC.B    'kick00000'
  169. KICKEND    DC.B    0
  170. TAGITEM    DC.L    ASLFR_InitialFile,KICKSTR,0
  171.     CSTRING    '$VER: GrabKick 1.11 (14.02.96) (PD) by SDI'
  172.     END
  173.  
  174.